package co.edu.usbcali.egrapico.logica;

/**
 * Clase para la traducci�n de la representaci�n de una
 * <Code>Aplicaci�n</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo
 * PiCO</I>. <P> Recibe en <I>GraPiCO Textual</I>: <P> <Blockquote><Pre> ((x-y)Imag.ext~Puerto) Identificador
 * </Pre></Blockquote> <P> Traducci�n a <I>C�lculo PiCO</I> del constructor: <Blockquote><Pre> Identificador
 * </Pre></Blockquote>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005.
 */
public class Application {

    // Variable para almacenar una aplicaci�n representada en c�lculo PiCO.
    String applicationPico = "";
    // Objeto de la clase Identifier.
    Identifier identifier;
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>Application</Code>.<P> Toma una
     * <Code>Aplicaci�n</Code> representada en <I>GraPiCO Textual</I> y separa
     * la parte de la expresi�n que hace referencia al
     * <Code>Puerto</Code> de la aplicaci�n con el fin de obtener solo el
     * <Code>Identificador</Code>.
     *
     * @param applicationGraPicoT Expresi�n equivalente a la representaci�n de
     * una
     * <Code>Aplicaci�n</Code> en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre o lista de nombres de procesos.
     */
    public Application(String applicationGraPicoT, String nameProcess) {

        // Se obtiene el nombre o lista de nombres de procesos.
        nameCurrentProcess = nameProcess;

        /*
         * Se obtiene el identificador de la aplicaci�n el cual se encuentra
         * despu�s del par�ntesis de cerradura del puerto.
         */
        String identifierGraPicoT = "";
        identifierGraPicoT = applicationGraPicoT.substring(applicationGraPicoT.indexOf(")(") + 1);

        // Se crea un nuevo objeto de la clase Identifier con el identificador obtenido.
        identifier = new Identifier(identifierGraPicoT, "", "");

    }

    /**
     * M�todo generador de la traducci�n de una
     * <Code>Aplicaci�n</Code>.<P> Se obtiene la traducci�n del
     * <Code>Identificador</Code> lo cual equivale a una
     * <Code>Aplicaci�n</Code> representada en <I>C�lculo PiCO</I>.
     *
     * @return la
     * <Code>Aplicaci�n<Code> traducida a <I>C�lculo PiCO</I>.
     */
    public String traslate() {

        String identifierPico = identifier.traslate();
        applicationPico = identifierPico;
        // Se verifica que corresponda a un identificador no num�rico
        if (Character.isLetter(identifierPico.charAt(0))) {
            SemanticAnalizer.PutRequiredIdentifiers(nameCurrentProcess, identifierPico);
        }
        return applicationPico;
    }
}